/*给定一个可能包含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
*说明：解集不能包含重复的子集。
*   输入: [1,2,2]
*   输出:
*    [
*    [2],
*    [1],
*    [1,2,2],
*    [2,2],
*    [1,2],
*    []
*    ]
*/

/**
 * 由于数组的长度可以为无限大，这让我们无从下手。不过，算法毕竟是逐步实现的，我们可以从小规模的问题入手。这时，我们把问题规模缩小一点，减少我们思考的范围。
 * 先思考一个元素，那无非就是选和不选，我们假定一开始数组是空的，那么在做完第一次选择之后，应该有两个数组[[], [e_1]][[],[e1]]。
 * 然后，我们再考虑第二个元素，则有[[], [e_1], [e_2], [e_1, e_2]][[],[e1],[e2],[e1,e2]]。
 * 发现了吗？这里存在一个规律，[[]] \rightarrow [[], [e_1]] \rightarrow [[], [e_1], [e_2], [e_1, e_2]][[]]→[[],
 * [e1]]→[[],[e1],[e2],[e1,e2]]，每次做选择之后的结果都是在上一步已知的集合上进行扩充得到的，
 * 即当前的集合_i = 集合_{i-1} \bigcup 从集合_{i-1}扩充后的集合当前的集合i=集合i−1⋃从集合i−1扩充后的集合。
 * 那么，扩充的方式就是对集合_{i-1}集合i−1中的每个子集加上一个新的元素ei。
 */
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var subsets = function(nums) {
    let ws = [[]];
    for(let i=0; i < nums.length; ++i) {
        debugger
        for(let j=0, len = ws.length; j < len; ++j) { //这里不能写成i<wx.length,因为wx是动态的,在这里把len先把它变成一个局部变量。不然就会变成无限循环了。
            ws.push(ws[j].concat([nums[i]]));
        }
    }
    return ws;
};
// let a = subsets([1,2,2])
// console.log(a)

/**
 * 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。
*请你找出这两个有序数组的中位数，并且要求算法的时间复杂度为 O(log(m + n))。
*你可以假设 nums1 和 nums2 不会同时为空。
 */
/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number}
 */
var findMedianSortedArrays = function(nums1, nums2) {
    let temp =''
    let arr = []
        arr = arr.concat(nums1,nums2)
        arr = arr.sort(function(a,b){return a-b})
        let mid = Math.floor(arr.length/2)
    if(arr.length%2 ==0 ){// 偶数    
        temp = (arr[mid-1] + arr[mid] )/2
    }else{// 奇数  
       temp = arr[mid]
    }
    return temp
};
// findMedianSortedArrays([1,2,5],[3,4,6])


